perm filename DPYSUB.SAI[GO,ALS] blob sn#105690 filedate 1974-06-12 generic text, type T, neo UTF8
00100	ENTRY IIICVT;
00200	BEGIN "DPYSUB"
00300	DEFINE ⊃="COMMENT", REAL_ARRAY="SAFE REAL ARRAY",
00400			    INTEGER_ARRAY="SAFE INTEGER ARRAY";
00500	EXTERNAL INTEGER PROCEDURE GVECW(INTEGER X,Y,OP,SIZ,BRT);
00600	EXTERNAL INTEGER PROCEDURE DPYPARS;
     

00100	INTERNAL PROCEDURE DDOUT(INTEGER_ARRAY DDBUF);
00200	BEGIN	INTEGER FOO,FOO2;
00300		FOO←POINT(0,DDBUF[1],35);
00400		FOO2←ARRINFO(DDBUF,0);
00500	START_CODE DEFINE UPGIOT="'715140000000";
00600		UPGIOT FOO;
00700	END;
00800	END "DDOUT";
00900	
01000	INTERNAL INTEGER DDCHAN;
01100	
01200	INTERNAL PROCEDURE DDCLR;
01300	BEGIN	INTEGER I,WD;DEFINE INVERT="'10000000000";
01400		INTEGER ARRAY DDBUF[1:3];
01500		WD←'126004001324+INVERT;
01600		DPB(DDCHAN,POINT(8,WD,23));
01700		DDBUF[1]←WD;DDBUF[2]←WD;
01800		DDOUT(DDBUF);
01900	END "DDCLR";
02000	
02100	INTERNAL BOOLEAN OVERLAY;
02200	
02300	PROCEDURE DDFIX(INTEGER CHAN;INTEGER ARRAY DDBUF;
02400			INTEGER C0,L0,LL,SIZL);
02500	BEGIN	INTEGER CHANWD,DDPTR,DDLNO,FIELD,CWD;
02600		CHANWD←'002004003324;DPB(CHAN,POINT(8,CHANWD,23));
02700		DPB(C0,POINT(7,CHANWD,15));
02800		CWD←'116000001454+(IF OVERLAY THEN '040000000000 ELSE 0);
02900		DDPTR←POINT(36,DDBUF[1],-1);
03000		FOR FIELD←0 STEP 1 UNTIL 3 DO
03100		 BEGIN "FIELD"
03200		   FOR DDLNO←L0+FIELD STEP 4 UNTIL LL DO
03300		    BEGIN "LINE"
03400			DPB(DDLNO,POINT(4,CWD,23));
03500			DPB(DDLNO LSH -4,POINT(5,CWD,15));
03600			IDPB(CWD,DDPTR);IDPB(CHANWD,DDPTR);
03700			DDPTR←DDPTR+SIZL;
03800			CWD←'454;
03900		    END "LINE";
04000		 END "FIELD";
04100		IDPB('000004010334,DDPTR);IDPB(0,DDPTR);
04200	END "DDFIX";
     

00100	INTERNAL INTEGER GFSIZX,GFSIZY,GFSIZL,X0,Y0,SCALX,SCALY,
00200			 XCENT,YCENT,LMAR,RMAR,YBOT,CHSCAL;
00300	INTERNAL REAL ASPECT,CHASP,SQALE;
00400	INTERNAL INTEGER DDPOSX,DDPOSY,DDORGX,DDORGY;
00500	EXTERNAL PROCEDURE IIIWD(INTEGER WD);
00600	INTERNAL INTEGER ARRAY DDBUF[1:5210];
00700	REQUIRE "CHRTBL" LOAD_MODULE;
00800	INTERNAL PROCEDURE IIISUB(INTEGER_ARRAY DPYBUF);
00900	BEGIN	INTEGER IFRST;
01000		IFRST←DDPOSX LAND 7;
01100		GFSIZL←(IFRST+GFSIZX-1) LSH -5 +1;
01200	BEGIN
01300	INTERNAL INTEGER_ARRAY PTTAB[0:GFSIZX],LINTAB[0:GFSIZY-1];
01400		INTEGER LIN,FPT,PTPT,OPT,DPSIZ;
01500		INTEGER I,OP,DPWD,FIELD,DPYLO;
01600		DEFINE DDCODE="2";
01700		DPYLO←ARRINFO(DPYBUF,1);
01800		DPSIZ←DPYBUF[DPYLO+1];
01900		FPT←POINT(1,DDBUF[3],IFRST-1);
02000		PTPT←POINT(36,PTTAB[0],-1);
02100		OPT←POINT(1,DDBUF[3],-1);
02200		START_CODE
02300		 DEFINE PT="1",J="2",I="3";LABEL LI,LJ,LE;
02400		 MOVE PT,FPT;MOVEI I,31;SUB I,IFRST;MOVE J,GFSIZX;
02500	LJ:	 ADD PT,['4000000];
02600	LI:	 IBP PT;IDPB PT,PTPT;SOJLE J,LE;SOJGE I,LI;
02700		 AOS PT,OPT;MOVEI I,31;JRST LJ;
02800	LE:	END;
02900		I←0;
03000		FOR FIELD←0 STEP 1 UNTIL 3 DO
03100		FOR LIN←FIELD STEP 4 UNTIL GFSIZY-1 DO
03200		 BEGIN LINTAB[LIN]←I*(GFSIZL+2);I←I+1;END;
03300		DDBUF[1]←DDCODE;ARRBLT(DDBUF[2],DDBUF[1],ARRINFO(DDBUF,0)-1);
03400	
03500		IIIWD(GVECW(0,0,'146,2,0));
03600		FOR I←1 STEP 1 UNTIL DPSIZ DO IIIWD(DPYBUF[I+DPYLO+1]);
03700	DDFIX(DDCHAN,DDBUF,DDPOSX LSH -3+1,DDPOSY,DDPOSY+GFSIZY-1,GFSIZL);
03800	END;
03900	END "IIISUB";
04000	
04100	INTERNAL  PROCEDURE IIICVT(INTEGER_ARRAY DPYBUF);
04200	BEGIN
04300		IF ASPECT=0 THEN ASPECT←.85;
04400		IF CHASP=0 THEN CHASP←ASPECT;
04500		GFSIZX←336; GFSIZY←400; GFSIZL←11 ;
04600		IF SQALE=0 THEN SQALE←480/1024;
04700		SCALY←SQALE*(1 LSH 18);
04800		SCALX←ASPECT*SCALY;
04900		IF CHSCAL=0 THEN CHSCAL←SCALY;
05000		XCENT←256 LSH 18;YCENT←240 LSH 18;
05100		DDPOSX←64; DDPOSY←24;
05200		LMAR←0;RMAR←1023*SCALX;
05300		YBOT←479 LSH 18;
05400		IIISUB(DPYBUF);
05500	END "IIICVT";
05600	
05700	END "DPYSUB";